This strategy depends on previously loading all data, aligned with the mixed hg19 and mm10 genomes, into Seurat and clustering. One cluster is identified as human, and the barcodes from this cluster have already been stored as “hm.rds.” The remaining mouse cells were stored as “musCells.rds.”
To begin this analysis, load all raw data from cellranger again, marking each sample by prepending “s1..s4” to the barcode.
A homologene conversion table is also saved (as “geneTrans.txt”) but is missing the mitochondrial genes. The human and mouse mitochondrial genes are extracted from the rownames of the Seurat object and appended to the homologene table, becoming the object “xTrans.”
The Seurat object is output to a table of raw counts. The human subset is obtained by selecting the data with the array of human barcodes. The homologenes are selected also, and then the table is converted to mouse gene symbols. The raw counts table is then selected for mouse barcodes and mouse gene symbols present in the homologene table.
These two tables are each loaded into a Seurat object and then merged, normalized and scaled. Show clusters labeled by cell; split by sample. Show nCount_RNA also. Determine significantly-different list mouse vs human.
Read cellranger output from each sample. Clean up gene symbols (replace “_" with “-”). Add sample IDs to barcodes. Finally, create Seurat objects from each sample, merge them, and delete intermediate objects.
s1.data=Read10X(data.dir="../results/S1/outs/filtered_feature_bc_matrix/")
s2.data=Read10X(data.dir="../results/S2/outs/filtered_feature_bc_matrix/")
s3.data=Read10X(data.dir="../results/S3/outs/filtered_feature_bc_matrix/")
s4.data=Read10X(data.dir="../results/S4/outs/filtered_feature_bc_matrix/")
#some human gene symbols have underscores (but these are not in geneTrans).
#Substitute a dash so as not to raise an error.
#Note that v3 of CreateSeuratObject also translates underscore to dashes, so
#feature names become "hg19-" and "mm10-" unlike previous (v2) datasets.
rownames(s1.data)=gsub("_","-",rownames(s1.data))
rownames(s2.data)=gsub("_","-",rownames(s2.data))
rownames(s3.data)=gsub("_","-",rownames(s3.data))
rownames(s4.data)=gsub("_","-",rownames(s4.data))
#rename cells
colnames(x=s1.data) <- paste('s1',colnames(x=s1.data),sep="_")
colnames(x=s2.data) <- paste('s2',colnames(x=s2.data),sep="_")
colnames(x=s3.data) <- paste('s3',colnames(x=s3.data),sep="_")
colnames(x=s4.data) <- paste('s4',colnames(x=s4.data),sep="_")
#create objects
s1=CreateSeuratObject(counts=s1.data,project="MG")
s2=CreateSeuratObject(counts=s2.data,project="MG")
s3=CreateSeuratObject(counts=s3.data,project="MG")
s4=CreateSeuratObject(counts=s4.data,project="MG")
#Use https://satijalab.org/seurat/essential_commands.html
mg=merge(x=s1,y=c(s2,s3,s4),project="MG")
#at this point we don't need all the original sample objects--can re-create if needed
rm(s1,s2,s3,s4,s1.data,s2.data,s3.data,s4.data)
#summary of object
print(mg)
## An object of class Seurat
## 112137 features across 29974 samples within 1 assay
## Active assay: RNA (112137 features)
Import conversion table (geneTrans) to translate human symbols to mouse symbols. Add mitochondrial genes.
#load gene translation table
geneTrans=read.table("geneTrans.txt",sep=",",header=T,stringsAsFactors = F,row.names = 1)
#need to fix underscore->dash conversion for geneTrans, from v2 Seurat analysis
geneTrans$hg19=gsub("_","-",geneTrans$hg19)
geneTrans$mm10=gsub("_","-",geneTrans$mm10)
row.names(geneTrans)=gsub("_","-",row.names(geneTrans))
#extract mito genes for both species and add to geneTrans
mito.m=grep("^mm10-mt",rownames(mg),value=T)
mito.h=grep("^hg19-MT-",rownames(mg),value=T)
mito.m=substr(mito.m,6,nchar(mito.m))
mito.h=substr(mito.h,6,nchar(mito.h))
#turns out, these two vectors (n=37 each) are ordered and match, build an extended translation table
mitoTrans=data.frame(row.names = paste("mm10",mito.m,sep="-"),
Human.Symbol = mito.h,
Homologene_ID = rep(NA,length(mito.m)),
None = rep("yes",length(mito.m)),
Mouse.Symbol = mito.m,
hg19 = paste("hg19",mito.h,sep="-"),
mm10 = paste("mm10",mito.m,sep="-")
)
#extended translation table
xTrans = rbind(geneTrans,mitoTrans)
dim(xTrans)
## [1] 17666 6
head(xTrans)
## Human.Symbol Homologene_ID None Mouse.Symbol hg19
## mm10-A1bg A1BG 11167 yes A1bg hg19-A1BG
## mm10-A1cf A1CF 16363 yes A1cf hg19-A1CF
## mm10-A2m A2M 37248 yes A2m hg19-A2M
## mm10-A3galt2 A3GALT2 16326 yes A3galt2 hg19-A3GALT2
## mm10-A4galt A4GALT 9690 yes A4galt hg19-A4GALT
## mm10-A4gnt A4GNT 87446 yes A4gnt hg19-A4GNT
## mm10
## mm10-A1bg mm10-A1bg
## mm10-A1cf mm10-A1cf
## mm10-A2m mm10-A2m
## mm10-A3galt2 mm10-A3galt2
## mm10-A4galt mm10-A4galt
## mm10-A4gnt mm10-A4gnt
Results were previously split by barcode IDs in a previous clustering (see Xu et al., 2019)
The original clustering, using this dataset and the mixed genome, produced one cluster that was clearly the human cells. The barcode IDs were stored in a RDS file. Re-load here to simplify gene translation. Similarly, the remaining mouse barcodes were stored in musCells.
hmCells=readRDS("hm.rds")
musCells=readRDS("musCells.rds")
length(hmCells)
## [1] 1684
length(musCells)
## [1] 17459
From the combined Seurat object, extract a copy of the raw counts and then subset it for human genes and barcodes. Translate the human gene symbols to mouse gene symbols. Then convert back to a Seurat object.
#extract all raw counts into table for subsetting by human cells and genes
hg.raw=GetAssayData(mg,slot="counts")
#subset rows in geneTrans (not necessary but simpler)
hg.raw=hg.raw[row.names(hg.raw) %in% xTrans$hg19,] #cut from 13283 to 11364 rows
hg.raw=hg.raw[,colnames(hg.raw) %in% hmCells]
#translate human symbols to mouse
hg.trans=merge(x=hg.raw,y=xTrans[,c(5,6)],by.x=0,by.y="hg19",all.x=T)
rownames(hg.trans)=hg.trans$mm10
hg.trans=hg.trans[,!(names(hg.trans) %in% c("Row.names","mm10"))]
#remove "mm10"" from gene symbol
row.names(hg.trans)=substr(row.names(hg.trans),6,nchar(row.names(hg.trans)))
#convert matrix back into Seurat object
hm=CreateSeuratObject(hg.trans,project="MG",min.cells=5)
rm(hg.raw,hg.trans)
print(hm)
## An object of class Seurat
## 9689 features across 1684 samples within 1 assay
## Active assay: RNA (9689 features)
Extract a copy of the raw counts, subset for mouse genes and barcodes, and convert back to Seurat object.
mm.raw=GetAssayData(mg,slot="counts")
mm.raw=mm.raw[row.names(mm.raw) %in% xTrans$mm10,]
mm.raw=mm.raw[,colnames(mm.raw) %in% musCells]
row.names(mm.raw)=substr(row.names(mm.raw),6,nchar(row.names(mm.raw)))
mm=CreateSeuratObject(mm.raw,project="MG",min.cells=5)
rm(mm.raw)
print(mm)
## An object of class Seurat
## 14828 features across 17459 samples within 1 assay
## Active assay: RNA (14828 features)
Now that we have two Seurat objects, one derived from human cells with translated mouse gene symbols, and the other from the mouse cells only, merge back into a single object.
#merge with mouse
hm=merge(x=hm,y=mm,project="HM")
#clean up objects no longer needed
rm(mm,mito.m,mito.h)
#summarize merged object
print(hm)
## An object of class Seurat
## 15022 features across 19143 samples within 1 assay
## Active assay: RNA (15022 features)
Use standard workflow to calculate percent.mito (now all mouse symbols) and visualize by sample.
#filter and normalize merged object
mito.features=grep(pattern="^mt-",x=rownames(x=hm),value=T)
percent.mito=Matrix::colSums(x=GetAssayData(object=hm,slot="counts")[mito.features,]) /
Matrix::colSums(x=GetAssayData(object=hm,slot='counts'))
hm[['percent.mito']] = percent.mito
plot(density(percent.mito),main="Percent Mito Density Plot")
To assess quality of the samples, plots showing the numbers of features per cell, the numbers of RNA detected per cell, and the percent mito are shown as jittered dots with a violin distribution summary. A scatterplot compares the number of RNAs identified per cell with the percent mito (colored by sample). Finally, a second scatterplot compares the number of features identified with the number of RNAs counted per cell (colored by sample).
VlnPlot(object=hm,features=c("nFeature_RNA","nCount_RNA","percent.mito"),ncol=3)
FeatureScatter(object=hm,feature1 = "nCount_RNA",feature2 = "percent.mito")
FeatureScatter(object=hm,feature1 = "nCount_RNA",feature2 = "nFeature_RNA")
Print summary data before and after subsetting. Then normalize, find variable genes, and scale.
print(hm)
## An object of class Seurat
## 15022 features across 19143 samples within 1 assay
## Active assay: RNA (15022 features)
hm=subset(hm,nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mito < 0.05)
print(hm)
## An object of class Seurat
## 15022 features across 17879 samples within 1 assay
## Active assay: RNA (15022 features)
hm=NormalizeData(hm,normalization.method = "LogNormalize",scale.factor=1e4)
hm=FindVariableFeatures(hm,selection.method = 'mean.var.plot',
mean.cutoff = c(0.0125,3),dispersion.cutoff = c(0.5,Inf))
length(VariableFeatures(hm))
## [1] 2016
hm=ScaleData(hm,vars.to.regress = c("nCount_RNA","percent.mito"))
## Regressing out nCount_RNA, percent.mito
## Scaling data matrix
Start with PCA and determine how many dimensions are informative. Output diagnostics.
hm=RunPCA(hm,features=VariableFeatures(hm),verbose=F)
print(hm[['pca']],dims=1:5,nfeatures=5,projected=F)
## PC_ 1
## Positive: Gria2, Dclk1, Meg3, Aplp1, Meis2
## Negative: Tyrobp, C1qb, C1qc, C1qa, Aif1
## PC_ 2
## Positive: Gria2, Dclk1, Meis2, C1qb, C1qc
## Negative: Flt1, Cldn5, Itm2a, Igfbp7, Ptprb
## PC_ 3
## Positive: Syt1, Meg3, Ndrg4, Snap25, Gad1
## Negative: Car2, Cnp, Cryab, Cldn11, Ermn
## PC_ 4
## Positive: Cldn11, Ermn, Mal, Stmn4, Tubb4a
## Negative: Atp1a2, Gja1, Slc1a3, Plpp3, Aldoc
## PC_ 5
## Positive: mt-Nd3, mt-Co2, Spp1, Cd74, H2-Ea-ps
## Negative: Hexb, Ctss, Ctsd, Fyb, Rnase4
VizDimLoadings(hm,dims=1:2)
DimPlot(hm)
hm=ProjectDim(hm,verbose=F)
DimHeatmap(hm,dims=1,cells=500,balanced=T)
DimHeatmap(hm,dims=1:6,cells=500,balanced=T)
hm=JackStraw(hm,num.replicate=100)
hm=ScoreJackStraw(hm,dims=1:20)
JackStrawPlot(hm,dims=1:20)
## Warning: Removed 28220 rows containing missing values (geom_point).
ElbowPlot(hm)
Use first 13 dimensions of PCA, cluster data and report the number of cells per cluster.
#start clustering
hm=FindNeighbors(hm,dims=1:13)
## Computing nearest neighbor graph
## Computing SNN
hm=FindClusters(hm,resolution=0.2)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 17879
## Number of edges: 614589
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9716
## Number of communities: 14
## Elapsed time: 6 seconds
table(Idents(hm))
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 4603 2507 2404 1988 1911 1274 789 665 533 373 359 321 94 58
Calculate tSNE projection and add to object. Plot tSNE for entire object or split by original sample.
Plot diagnostic Spp1 (specific for human microglia) and Hexb (specific for mouse microglia). Plot number of RNAs detected per cell.
hm=RunTSNE(hm,dims=1:13)
DimPlot(hm,reduction='tsne')
DimPlot(hm,reduction='tsne',split.by='orig.ident')
FeaturePlot(hm,features='Spp1')
FeaturePlot(hm,features='Hexb')
FeaturePlot(hm,features='nCount_RNA')
Add UMAP projection to object. Plot along with diagnostic genes and numbers of RNAs.
hm=RunUMAP(hm,dims = 1:13)
DimPlot(hm,reduction='umap')
FeaturePlot(hm,features='Spp1')
FeaturePlot(hm,features='Hexb')
FeaturePlot(hm,features='nCount_RNA')
Calculate the features (genes) that distinguish each cluster from the mixture of remaining clusters. Display the top ten genes for each cluster, sorted by the average log fold change.
hm.markers=FindAllMarkers(hm,only.pos=T,min.pct = .25,logfc.threshold = .25,verbose=F)
hm.markers %>% group_by(cluster) %>% top_n(10,avg_logFC)
## # A tibble: 140 x 7
## # Groups: cluster [14]
## p_val avg_logFC pct.1 pct.2 p_val_adj cluster gene
## <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <chr>
## 1 0 2.51 0.981 0.291 0 0 Slc1a2
## 2 0 2.34 0.948 0.194 0 0 Aldoc
## 3 0 2.29 0.862 0.085 0 0 Ntsr2
## 4 0 2.29 0.942 0.16 0 0 Plpp3
## 5 0 2.19 0.94 0.144 0 0 Gja1
## 6 0 2.19 0.972 0.314 0 0 Mt2
## 7 0 2.16 0.901 0.163 0 0 Clu
## 8 0 2.15 0.971 0.287 0 0 Slc1a3
## 9 0 2.15 0.559 0.047 0 0 Slc6a11
## 10 0 2.08 0.988 0.395 0 0 Mt3
## # … with 130 more rows
Save a csv file with the top 5 genes per list. The csv file is saved with a “.txt” extension to prevent Excel from automatically converting gene names to dates. For example “March5” is normally converted to 3/5/2019. Manually important the file into Excel allows the user to specify that the column containing gene symbols should be treated as text.
hm.markers %>% group_by(cluster) %>% top_n(5,avg_logFC) %>%
write.csv("DHT Top 5 per cluster.csv.txt",row.names = F)
Use Spp1 and Hexb to identify cluster number(s) for human and mouse microglia, respectively.
humClus=as.character(subset(hm.markers,gene=="Spp1")$cluster)
print(humClus)
## [1] "5"
musClus=as.character(subset(hm.markers,gene=="Hexb")$cluster)
print(musClus)
## [1] "2" "12" "13"
With the identifiers stored, we can now find significantly different expression of genes distinguishing mouse and human microglia.
diffGenes=FindMarkers(hm,ident.1=humClus,ident.2=musClus,min.pct=0.1)
nrow(diffGenes)
## [1] 1711
The table shows the numbers of genes with adjusted p-value <= 0.05, at least 2-fold different, or both. The filtered list is displayed.
table(sig=diffGenes$p_val_adj <= 0.05, twofold=abs(diffGenes$avg_logFC) >= 1)
## twofold
## sig FALSE TRUE
## FALSE 14 0
## TRUE 1451 246
diffGenes %>% tibble::rownames_to_column() %>%
filter(p_val_adj <= 0.05) %>%
filter(abs(avg_logFC) >= 1) %>% paged_table
Save differential expressed list as object (for later use in R) and csv (as text to preserve gene names)
saveRDS(diffGenes,"DHT_diffGenes.rds")
write.table(as.data.frame(diffGenes),"DHT_diffGenes.csv.txt",sep=",",quote=T)
To evaluate expression levels of individual genes, extract the average expression level (linear normalized counts) for each cluster. Show sample of file and output as CSV (with “.txt” suffix as before).
hm.mean=AverageExpression(hm,add.ident="orig.ident",verbose=F)
head(hm.mean$RNA)
## 5_s1 1_s1 2_s1 4_s1 0_s1 8_s1
## A1bg 0.00000000 0.00000000 0.000000000 0.000000000 0.00000000 0.00000000
## A2m 6.51426128 0.01803440 0.007313983 0.000000000 0.42660682 0.00000000
## Aaas 0.09805454 0.07467464 0.051768906 0.023832681 0.03697663 0.12515645
## Aacs 0.06989817 0.04681504 0.078273992 0.005851649 0.19419455 0.00000000
## Aagab 0.06720742 0.13755333 0.314611214 0.169491842 0.10260681 0.04069739
## Aak1 2.08870073 0.32509616 0.304912579 1.349488018 0.59841337 0.48605735
## 7_s1 3_s1 9_s1 6_s1 11_s1 10_s1
## A1bg 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000
## A2m 0.06211489 0.07758004 0.07676129 0.04814382 1.2632902 2.33251246
## Aaas 0.05383290 0.12206591 0.17096233 0.00000000 0.1718981 0.08642295
## Aacs 0.33383597 0.00000000 0.00000000 0.03989866 0.2024824 0.06605369
## Aagab 0.36315077 0.13207846 0.01608519 0.18883233 0.3957454 0.04191080
## Aak1 0.51916569 0.64416169 0.36113035 0.53296140 0.4582857 0.76320502
## 12_s1 13_s1 5_s2 3_s2 1_s2 0_s2
## A1bg 0.0000000 0.0000000 0.02163378 0.00000000 0.00000000 0.00000000
## A2m 0.8635841 0.0000000 5.97837703 0.03116459 0.01000964 0.12149467
## Aaas 0.1823753 0.3484199 0.13992722 0.04735050 0.02766605 0.01054639
## Aacs 0.0000000 0.0000000 0.00000000 0.04079518 0.04505710 0.31314036
## Aagab 1.1416743 0.0000000 0.17040765 0.14417725 0.05858973 0.15457138
## Aak1 0.7317904 0.2715989 1.50949019 0.30096744 0.32193754 0.66518330
## 10_s2 2_s2 4_s2 11_s2 12_s2 8_s2
## A1bg 0.00000000 0.00000000 0.00000000 0.00000000 0.000000 0.0000000
## A2m 0.34463914 0.00000000 0.00000000 0.49406486 0.000000 0.0000000
## Aaas 0.04059348 0.02950091 0.13182740 0.03697144 0.000000 0.0000000
## Aacs 0.05534800 0.04934028 0.05304860 0.08021531 0.000000 0.0000000
## Aagab 0.20216885 0.37791831 0.07929372 0.19370490 0.000000 0.1092037
## Aak1 0.53601544 0.48080282 1.03910428 0.42636740 1.199808 1.1008134
## 9_s2 6_s2 7_s2 13_s2 5_s3 1_s3
## A1bg 0.00000000 0.00000000 0.00000000 0.000000 0.07615166 0.00000000
## A2m 0.05800935 0.04046945 0.09483167 0.000000 5.67226561 0.01172709
## Aaas 0.00000000 0.02759991 0.00000000 0.000000 0.11162848 0.05823968
## Aacs 0.09717512 0.11834782 0.14751432 0.000000 0.05642304 0.05288668
## Aagab 0.00000000 0.24243516 0.12957564 0.000000 0.09777691 0.10099257
## Aak1 0.30036250 0.72203213 0.97973982 1.908397 2.39475899 0.43061784
## 0_s3 4_s3 2_s3 7_s3 3_s3 11_s3
## A1bg 0.00000000 0.00000000 0.000000000 0.00000000 0.00000000 0.00000000
## A2m 0.19376557 0.01362000 0.006439532 0.03665474 0.00000000 0.36162411
## Aaas 0.05273833 0.01129654 0.035015445 0.01373868 0.09217814 0.04021151
## Aacs 0.23830876 0.00000000 0.023005582 0.03779411 0.03137384 0.11428998
## Aagab 0.13753030 0.13500441 0.224546398 0.12870306 0.15469933 0.18325088
## Aak1 0.66379411 1.43589172 0.360315416 0.77572166 0.55009392 0.41752666
## 6_s3 10_s3 8_s3 12_s3 9_s3 13_s3
## A1bg 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.0000000
## A2m 0.00000000 0.01728334 0.00000000 0.00000000 0.0000000 0.0000000
## Aaas 0.03990819 0.09547679 0.03241470 0.00000000 0.2702148 0.0000000
## Aacs 0.03739630 0.04524805 0.02089864 0.00000000 0.0000000 0.0000000
## Aagab 0.03592139 0.09088335 0.04486153 0.08167266 0.0698812 0.4319468
## Aak1 0.60737775 0.50182729 0.48039519 0.21331058 0.6734346 0.7632842
## 5_s4 3_s4 0_s4 6_s4 4_s4 1_s4
## A1bg 0.00000000 0.000000000 0.00000000 0.00000000 0.00000000 0.00000000
## A2m 6.11876769 0.004732796 0.12069356 0.00000000 0.02715190 0.01837634
## Aaas 0.14393409 0.016092732 0.05459799 0.08079821 0.05552747 0.04612040
## Aacs 0.08641502 0.010894291 0.16207560 0.03679718 0.07677476 0.06828998
## Aagab 0.07093040 0.172470004 0.09107345 0.06901813 0.11100047 0.10258943
## Aak1 2.96514866 0.365436101 0.58973692 1.16480105 1.44766149 0.42343873
## 2_s4 9_s4 10_s4 8_s4 7_s4 12_s4
## A1bg 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000 0.0000000
## A2m 0.00000000 0.09061911 0.4625947 0.00000000 0.01141041 0.0000000
## Aaas 0.10970929 0.03309330 0.0270475 0.06935919 0.07742343 0.0000000
## Aacs 0.03220165 0.00000000 0.0000000 0.06577606 0.13932987 0.0000000
## Aagab 0.27510570 0.13021772 0.0340748 0.06881465 0.08822602 0.0000000
## Aak1 0.39787465 0.57502942 0.5733602 0.38475438 0.67057328 0.7252027
## 13_s4 11_s4
## A1bg 0.0000000 0.0000000
## A2m 0.0000000 0.2533557
## Aaas 0.0000000 0.0000000
## Aacs 0.0000000 0.2407130
## Aagab 0.3140154 0.4172203
## Aak1 0.5854643 0.7164377
write.csv(hm.mean$RNA,"DHT hm cluster averages.csv.txt")
To display the cluster data coded by species, use the original barcode arrays to re-label the cells. The old (cluster ID) identifiers are stored as “old.idents”.
#stash idents
hm[["old.ident"]]=Idents(hm)
#apply new idents from stored vectors
Idents(hm,cells=hmCells)="Human"
Idents(hm,cells=musCells)="Mouse"
table(hm$orig.ident,Idents(hm))
##
## Mouse Human
## s1 3641 294
## s2 2685 214
## s3 4560 465
## s4 5719 301
DimPlot(hm,label=T,repel=T,label.size=8,reduction = "tsne")+NoLegend()
FeaturePlot(hm,features='nCount_RNA',reduction = "tsne")
FeaturePlot(hm,features='nCount_RNA',reduction = "tsne",split.by="ident")
sessionInfo()
## R version 3.5.3 (2019-03-11)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.2 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
## LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] rmarkdown_1.12 dplyr_0.8.0.1 Seurat_3.0.0.9000
##
## loaded via a namespace (and not attached):
## [1] nlme_3.1-137 tsne_0.1-3 bitops_1.0-6
## [4] RColorBrewer_1.1-2 httr_1.4.0 tools_3.5.3
## [7] utf8_1.1.4 R6_2.4.0 irlba_2.3.3
## [10] KernSmooth_2.23-15 lazyeval_0.2.2 colorspace_1.4-1
## [13] npsurv_0.4-0 withr_2.1.2 tidyselect_0.2.5
## [16] compiler_3.5.3 cli_1.1.0 plotly_4.9.0
## [19] labeling_0.3 caTools_1.17.1.2 scales_1.0.0
## [22] lmtest_0.9-36 ggridges_0.5.1 pbapply_1.4-0
## [25] stringr_1.4.0 digest_0.6.18 R.utils_2.8.0
## [28] pkgconfig_2.0.2 htmltools_0.3.6 bibtex_0.4.2
## [31] htmlwidgets_1.3 rlang_0.3.4 zoo_1.8-5
## [34] jsonlite_1.6 ica_1.0-2 gtools_3.8.1
## [37] R.oo_1.22.0 magrittr_1.5 Matrix_1.2-17
## [40] Rcpp_1.0.1 munsell_0.5.0 fansi_0.4.0
## [43] ape_5.3 reticulate_1.12 R.methodsS3_1.7.1
## [46] stringi_1.4.3 yaml_2.2.0 gbRd_0.4-11
## [49] MASS_7.3-51.1 gplots_3.0.1.1 Rtsne_0.15
## [52] plyr_1.8.4 grid_3.5.3 parallel_3.5.3
## [55] gdata_2.18.0 listenv_0.7.0 ggrepel_0.8.0
## [58] crayon_1.3.4 lattice_0.20-38 cowplot_0.9.4
## [61] splines_3.5.3 SDMTools_1.1-221 knitr_1.22
## [64] pillar_1.3.1 igraph_1.2.4 future.apply_1.2.0
## [67] codetools_0.2-16 glue_1.3.1 evaluate_0.13
## [70] lsei_1.2-0 metap_1.1 data.table_1.12.2
## [73] png_0.1-7 Rdpack_0.11-0 gtable_0.3.0
## [76] RANN_2.6.1 purrr_0.3.2 tidyr_0.8.3
## [79] future_1.12.0 assertthat_0.2.1 ggplot2_3.1.1
## [82] xfun_0.6 rsvd_1.0.0 survival_2.43-3
## [85] viridisLite_0.3.0 tibble_2.1.1 cluster_2.0.8
## [88] globals_0.12.4 fitdistrplus_1.0-14 ROCR_1.0-7